package com.asa.cg;

public class A {
	
	/**
	 * CG roots
	 * 		线程栈变量
	 * 		静态变量
	 * 		常量池
	 * 		JNI指针
	 * 
	 * CG Algorithms 基本算法
	 * 		Mark-Sweep 标记清除	会产生碎片		只会清除被回收内存空间，这样空间会出现虫洞
	 * 		Copying 拷贝		内存浪费		分区进行内存的使用
	 * 		Mark-Compact 标记压缩		效率比copy低		通过对内存移动的方式进行压缩
	 * 
	 * JVM的分代算法
	 * 		new-young
	 * 			存活对象少
	 * 			使用copy算法效率高
	 * 		old
	 * 			垃圾少
	 * 			一般使用mark compact
	 * 			g1使用copy
	 * 
	 * 
	 * eden(伊甸)--》 survivor（幸存带，多（两）个）--》tennured（终身 ，老年代，前面的都是新生代）
	 * 		进入老年代的年龄是根据垃圾回收器不同而不同的，
	 * ps：所谓年龄，就是CG回收的次数，没一次就算一岁
	 * 
	 * YGC
	 * 		Young GC Minor GC
	 * 		Eden区不足
	 * 
	 * FGC
	 * 		Full GC Major GC	会同时回收老年代和新生代
	 * 		Old空间不足
	 * 		
	 * 
	 *	总结：
	 * 		new 对象：	
	 * 			进栈：栈完结，对象也就没了
	 * 			不进栈：
	 * 				对象比较大，直接进入老年代，然后FGC
	 * 				对象不大，TLAD（分配专属空间判断） 分配到伊甸
	 * 					接下来如果年龄够进old代，否则持续在新生代的幸存代
	 * 	
	 * Garbage Collectors（GC策略）	年轻代中间的一个会和老年代中的一个混合使用
	 * 		Young
	 * 			Serial	单线程	几十兆
	 * 			ParNew	多线程	
	 * 			Parallel Scvenge 多线程	几个G
	 * 		Old
	 * 			CMS	几十个G	三色标记。。。
	 * 			Serial Old
	 * 			Parallel Old
	 * 	不分代，就这个（之后十几年的趋势是不用你来调优。。。新版会优化CG）
	 * 	常用组合的是Serial Serial Old
	 *	常用组合的是ParNew CMS
	 * 	1.8默认的是Parallel Scvenge  ， Parallel Old
	 * 
	 * 		
	 * 		G1	上百G内存 分块，优先处理垃圾最多的块群（逻辑上还是有分代，物理上无了）
	 * 		ZGC	支持4T	（完全无分代）
	 * 		Shenaedoah	更多T（完全无分代）
	 * 		Epsilon	什么也不干，调试用的，不用GC参与就能干活
	 * 	有个疯狂的做法，服务器内存满了就重启，但有时候服务器是不能够被重启的
	 * 
	 * 	调优 1调吞吐量2响应时间（stw）
	 * 
	 * 	查看java的CG的cmd代码
	 * 	java -XX:+PrintCommandLineFlags -version
	 * 
	 */
	


}
